package com.longkier.gx_library_springboot.utils;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileUploadUtils {

    /**
     * 保存文件到指定目录
     *
     * @param file 上传的文件
     * @param bookNumber 图书编号
     * @return 保存后的文件路径
     * @throws IOException 文件保存异常
     */
    public static String saveFile(MultipartFile file, String bookNumber) throws IOException {
        // 获取文件扩展名
        String originalFileName = file.getOriginalFilename();
        String extension = originalFileName != null ? originalFileName.substring(originalFileName.lastIndexOf(".")) : "";

        // 使用图书编号作为文件名
        String fileName = bookNumber + extension;

        // 获取资源目录的路径
        Path resourceDir = Paths.get("GX_library_springboot",
                "src", "main", "webapp");

        // 创建保存路径
        Path path = resourceDir.resolve(fileName);
        Files.createDirectories(path.getParent());

        // 保存文件
        file.transferTo(path);

        // 返回文件的相对路径
        return fileName;
    }

    /**
     * 删除文件
     *
     * @param filePath 文件路径
     * @throws IOException 文件删除异常
     */
    public static void deleteFile(String filePath) throws IOException {
        // 获取资源目录的路径
        Path resourceDir = Paths.get("GX_library_springboot",
                "src", "main", "webapp");

        // 创建文件路径
        Path path = resourceDir.resolve(filePath);

        // 删除文件
        Files.deleteIfExists(path);
    }

    /**
     * 读取文件内容并设置响应头
     *
     * @param filePath 文件路径
     * @return ResponseEntity 包含文件内容和响应头
     * @throws IOException 文件读取异常
     */
    public static ResponseEntity<byte[]> readFileAndSetHeaders(String filePath) throws IOException {
        // 获取资源目录的路径
        Path resourceDir = Paths.get("GX_library_springboot", "src", "main", "webapp");
        // 获取文件路径
        Path path = resourceDir.resolve(filePath);
        // 判断文件是否存在
        if (Files.exists(path)) {
            // 获取文件内容
            byte[] fileContent = Files.readAllBytes(path);
            // 获取文件的 MIME 类型
            String mimeType = Files.probeContentType(path);
            if (mimeType == null) {
                mimeType = "application/octet-stream"; // 默认 MIME 类型
            }
            // 设置响应头，告知浏览器是图片
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.valueOf(mimeType));
            // 返回内容
            return new ResponseEntity<>(fileContent, headers, HttpStatus.OK);
        } else {
            return null;
        }
    }

}
